import cv2
import numpy as np
import pytesseract
import re
# 读取图像
image = cv2.imread('captcha.png')

# 转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用自适应阈值进行二值化
binary_image = cv2.adaptiveThreshold(gray_image, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C,
                                     cv2.THRESH_BINARY, 11, 2)

# 去噪（如果需要）
binary_image = cv2.medianBlur(binary_image, 3)

# 形态学操作（如果需要）
kernel = np.ones((1, 1), np.uint8)
binary_image = cv2.dilate(binary_image, kernel, iterations=1)

# 使用 pytesseract 进行 OCR 识别
captcha_text = pytesseract.image_to_string(binary_image, config='--psm 7 --oem 1 -c tessedit_char_whitelist=0123456789*+=')

# 打印识别结果
print("识别出的文本:", captcha_text)
# 使用正则表达式提取数学表达式
math_expression = re.search(r'(\d+)\s*[*×]\s*(\d+)', captcha_text)

if math_expression:
    # 提取数字并计算结果
    num1, num2 = map(int, math_expression.groups())
    result = num1 * num2
    print("识别出的数学表达式:", math_expression.group())
    print("计算结果:", result)
else:
    print("未能识别出数学表达式")